/**
 * 声明专门的函数用来在分配权限的模态框中显示Auth的树形结构
 */
function fillAuthTree() {

    // 1、发送同步ajax请求查询Auth数据
    var ajaxResult = $.ajax({
        "url": "assign-get-all-auth.json",
        "type": "post",
        "dataType": "json",
        "async": false
    });


    if (ajaxResult.status != 200) {
        layer.msg("请求处理出错！响应状态码：" + ajaxResult.status + "说明是：" + ajaxResult.statusText);
        return;
    }


    // 2、从响应中获取Auth的JSON数据
    // 从服务器查询到的list不用我们自己组装，交给zTree处理
    var authList = ajaxResult.responseJSON.data;

    // 3、准备对zTree进行的设置
    var setting = {
        "data": {
            "simpleData": {

                // 开启简单JSON功能
                "enable": true,

                // 使用 categoryId 属性关联父节点，不使用pId关联父节点
                "pIdKey": "categoryId"
            },
            "key": {
                // 使用title属性显示节点名称，不使用name作为节点名了
                "name": "title"
            }
        },
        "check": {
            // 显示 复选框或单选框
            "enable": true
        }
    };

    // 4、生成树形结构
    $.fn.zTree.init($("#authTreeDemo"), setting, authList);

    // 获取zTreeObj 对象
    var zTrreObj = $.fn.zTree.getZTreeObj("authTreeDemo");

    // 调用 zTreeObj对象的 expandAll(true)函数，把节点展开
    zTrreObj.expandAll(true);

    // 5、查询已经被分配的Auth的id的数组
    ajaxResult = $.ajax({
        "url": "get-assigned-auth-id-by-role-id.json",
        "type": "post",
        "data": {
            "roleId": window.roleId
        },
        "dataType": "json",
        "async": false
    });

    if (ajaxResult.status != 200) {
        layer.msg("请求处理出错！响应状态码：" + ajaxResult.status + "说明是：" + ajaxResult.statusText);
        return;
    }

    // 从响应结果中获取 authIdArray
    var authIdArray = ajaxResult.responseJSON.data;

    // 6、根据authIdArray把树形结构中得勾选上
    // ① 遍历 authIdArray
    for (var i = 0; i < authIdArray.length; i++) {

        var authId = authIdArray[i];

        // ② 根据authId 在权限树形结构中查找对应的节点
        var treeNode = zTrreObj.getNodeByParam("id", authId);

        // ③ 将treeNode 设置为勾选

        // checked设置为true 表示 该节点勾选
        var checked = true;

        // checkTypeFlag 设置为 false 表示 该节点与父节点不联动勾选
        var checkTypeFlag = false;
        // 执行
        zTrreObj.checkNode(treeNode, checked, checkTypeFlag);
    }

}


/**
 * 声明专门的函数显示确认删除模态框
 */
function showConfirmModal(roleArray) {

    // 打开模态框
    $("#modalConfirmRole").modal("show");

    // 清除旧的内容
    $("#roleIdSpan").empty();

    // 声明一个全局变量存放角色id
    window.roleIdArray = [];

    // 遍历roleArray数组
    for (var i = 0; i < roleArray.length; i++) {
        var role = roleArray[i];

        var roleName = role.roleName;

        // 将要删除的角色名称回显
        $("#roleIdSpan").append(roleName + "<br/>");

        var roleId = role.roleId;

        // 调用数组对象的push()进行添加新元素
        window.roleIdArray.push(roleId);
    }

}


/**
 * 执行分页，生成页面效果，任何时候调用这个函数都会重新加载页面
 */
function generatePage() {

    // 1、获取分页数据
    var pageInfo = getPageInfoRemote();

    // 2、填充表格信息
    fillTableBody(pageInfo);
}

/**
 * 远程获取 PageInfo 对象，获取分页数据
 *
 * 发送 ajax同步请求
 *
 */
function getPageInfoRemote() {

    // 调用 $.ajax() 函数发送请求并接收 $.ajax() 函数的返回值
    var ajaxResult = $.ajax({
        "url": "role-get-page-info.json",
        "type": "post",
        "data": {
            "pageNum": window.pageNum,
            "pageSize": window.pageSize,
            "keyword": window.keyword
        },
        "async": false,
        "dataType": "json"
    });

    console.log(ajaxResult);

    // 判断响应状态码是否为200
    var statusCode = ajaxResult.status;

    // 响应状态码不为200，表示程序出现错误，不在执行后面的代码
    if (statusCode != 200) {
        layer.msg("失败！响应状态码=" + statusCode + "说明信息=" + ajaxResult.statusText);
        return null;
    }

    // 响应状态码为200，说明请求处理成功
    var resultEntity = ajaxResult.responseJSON;

    // 从resultEntity 中获取 result属性
    var result = resultEntity.result;

    // 判断result是否成功
    if (result == "FAILED") {
        layer.msg(resultEntity.message);
        return null;
    }

    // 确认result成功后获取 pageInfo
    var pageInfo = resultEntity.data;

    // 返回 pageInfo
    return pageInfo;
}


/**
 * 填充表格信息
 * @param pageInfo
 */
function fillTableBody(pageInfo) {

    // 清除tbody里的旧数据
    $("#rolePageTbody").empty();
    $("#Pagination").empty();

    // 判断 pageInfo 是否可用
    if (pageInfo == null || pageInfo.length == 0 || pageInfo == undefined || pageInfo.list.length == 0) {
        $("#rolePageTbody").append("<tr><td colspan='4'>抱歉！没有查询到您所搜索的数据！</td></tr>");
        return;
    }

    // 使用 pageInfo 的list属性填充tbody
    for (var i = 0; i < pageInfo.list.length; i++) {

        var role = pageInfo.list[i];

        var roleId = role.id;

        var roleName = role.name;

        var idTd = "<td>" + (i + 1) + "</td>";

        var checkBoxTd = "<td><input id='" + roleId + "' class='itemBox' type='checkbox'></td>";

        var nameTd = "<td>" + roleName + "</td>";

        var checkBtn = "<button id='" + roleId + "' type='button' class='btn btn-success btn-xs checkBtn'><i class='glyphicon glyphicon-check'></i></button>";

        // 把当前的roleId 通过 “铅笔”按钮的id 传递给 该按钮的单击响应函数里，通过this.id取值
        var pencilBtn = "<button id='" + roleId + "' type='button' class='btn btn-primary btn-xs pencilBtn'><i class='glyphicon glyphicon-pencil'></i></button>";

        var removeBtn = "<button id='" + roleId + "' type='button' class='btn btn-danger btn-xs removeBtn'><i class='glyphicon glyphicon-remove'></i></button>";

        var btnTd = "<td>" + checkBtn + " " + pencilBtn + " " + removeBtn + "</td>";

        var tr = "<tr>" + idTd + checkBoxTd + nameTd + btnTd + "</tr>";

        $("#rolePageTbody").append(tr);
    }


    // 调用生成分条页函数
    generateNavigator(pageInfo);

}


/**
 * 生成分页条
 * @param pageInfo
 */
function generateNavigator(pageInfo) {

    // 获取总记录数
    var totalRecord = pageInfo.total;

    // 设置相关的属性
    var properties = {
        "num_edge_entries": 3,
        "num_display_entries": 5,
        "callback": paginationCallBack,
        "items_per_page": pageInfo.pageSize,
        "current_page": pageInfo.pageNum - 1,
        "prev_text": "上一页",
        "next_text": "下一页"
    };

    // 调用pagination()函数
    $("#Pagination").pagination(totalRecord, properties);
}


/**
 * Pagination的回调函数
 */
function paginationCallBack(pageIndex, jQuery) {

    // 翻页时清除总多选框的状态
    $("#sumBox").prop("checked", false);

    // 修改window 的 pageNum
    window.pageNum = pageIndex + 1;

    // 调用分页函数
    generatePage();

    // 取消页码超链接默认行为
    return false;

}